[GtkSearchEngineQuartz] Resolve the path to a GtkFile* for the hit list.
authorDaniel Boles <dboles.src@gmail.com>
Sun, 6 Jan 2019 23:56:57 +0000 (15:56 -0800)
committerDaniel Boles <dboles.src@gmail.com>
Mon, 7 Jan 2019 20:46:08 +0000 (20:46 +0000)
Instead of a char* path, which the search_hit parser doesn't expect,
causing a crash.

Closes: $https://gitlab.gnome.org/GNOME/gtk/issues/815
gtk/gtksearchenginequartz.c

index da90c4d56ba2dbfbcbe54bf8f5fdecd72d8a7047..972983aa3db82deef5c14e7aeeda7297c2aa1172 100644 (file)
@@ -78,23 +78,31 @@ G_DEFINE_TYPE_WITH_PRIVATE (GtkSearchEngineQuartz, _gtk_search_engine_quartz, GT
   for (i = submitted_hits; i < [ns_query resultCount]; i++)
     {
       id result = [ns_query resultAtIndex:i];
-      char *result_path;
+      const char *result_path;
+      GFile *file;
+      GtkSearchHit *hit;
 
-      result_path = g_strdup_printf ("file://%s", [[result valueForAttribute:@"kMDItemPath"] cString]);
-      hits = g_list_prepend (hits, result_path);
+      result_path = [[result valueForAttribute:@"kMDItemPath"] UTF8String];
+      file = g_file_new_for_path (result_path);
+
+      hit = g_new (GtkSearchHit, 1);
+      hit->file = file;
+      hit->info = NULL;
+
+      hits = g_list_prepend (hits, hit);
     }
 
   _gtk_search_engine_hits_added (engine, hits);
-  g_list_free (hits);
+  g_list_free_full (hits, (GDestroyNotify) _gtk_search_hit_free);
 
-  submitted_hits = [ns_query resultCount];
+  submitted_hits += [ns_query resultCount];
 
   /* The beagle backend stops at 1000 hits, so guess we do so too here.
    * It works pretty snappy on my MacBook, if we get rid of this limit
    * we are almost definitely going to need some code to submit hits
    * in batches.
    */
-  if (submitted_hits > 1000)
+  if (submitted_hits > 25)
     [ns_query stopQuery];
 }